import request from '@/utils/request'
import axios from 'axios'

/**
 * 获取热门课程列表
 * @param {number} currentPage - 当前页码，默认为1
 * @param {number} pageSize - 每页显示数量，默认为12
 * @returns {Promise} - 返回课程列表数据
 */
export function getHotCourses(currentPage = 1, pageSize = 8) {
  return request({
    url: '/courseService/courseController/selectAllCourses',
    method: 'get',
    params: {
      currentPage,
      pageSize
    }
  }).then(response => {
    return response
  }).catch(error => {
    throw error
  })
}

/**
 * 获取课程详情
 * 根据课程ID获取课程的详细信息，包括课程内容、教师信息等
 * @param {string|number} courseId - 课程ID
 * @returns {Promise} - 返回包含课程详细信息的 Promise 对象
 */
export function getCourseDetail(courseId) {
  const courseIdStr = String(courseId)
  
  return request({
    url: '/courseService/courseController/selectCourseByCourseId',
    method: 'get',
    params: {
      courseId: courseIdStr
    }
  })
}

/**
 * 创建新课程
 * 使用FormData格式创建新课程，支持上传图片等文件
 * @param {FormData} data - 包含课程信息和图片的表单数据
 * @returns {Promise} - 返回创建结果的 Promise 对象
 */
export function createCourse(data) {
  return axios({
    url: '/courseService/courseController/insertCourse',
    method: 'post',
    data,
    headers: {
      'Content-Type': 'multipart/form-data',
      'Authorization': sessionStorage.getItem('token') || localStorage.getItem('token')
    },
    timeout: 30000
  })
}

/**
 * 获取教师信息
 * 根据课程ID获取授课教师的详细信息
 * @param {string|number} courseId - 课程ID
 * @returns {Promise} - 返回包含教师信息的 Promise 对象
 */
export function getTeacherInfo(courseId) {
  return request({
    url: '/courseService/courseController/selectTeacherInfo',
    method: 'get',
    params: { courseId }
  })
}

/**
 * 获取用户创建的课程
 * 获取当前登录用户创建的所有课程列表
 * @returns {Promise} - 返回包含课程列表的 Promise 对象
 */
export function getCreatedCourses() {
  return request({
    url: '/courseService/courseController/selectCourseByToken',
    method: 'post'
  })
}

/**
 * 获取用户参加的课程
 * 获取当前登录用户报名参加的所有课程列表
 * @returns {Promise} - 返回包含课程列表的 Promise 对象
 */
export function selectCourseByUserId() {
  return request({
    url: '/courseService/courseController/selectCourseByUserId',
    method: 'get'
  })
}

/**
 * 更新课程信息
 * 更新指定课程的基本信息
 * @param {Object} data - 包含更新后的课程数据
 * @returns {Promise} - 返回更新结果的 Promise 对象
 */
export function updateCourse(data) {
  return request({
    url: '/courseService/courseController/updateCourse',
    method: 'post',
    data
  })
}

/**
 * 删除课程
 * 删除指定ID的课程
 * @param {string|number} courseId - 要删除的课程ID
 * @returns {Promise} - 返回删除结果的 Promise 对象
 */
export function deleteCourse(courseId) {
  return request({
    url: '/courseService/courseController/delCourse',
    method: 'delete',
    params: { courseId }
  })
}

/**
 * 更新课程图片
 * @param {FormData} data - 包含新图片的表单数据
 * @returns {Promise} - 返回更新结果
 */
export function updateCourseImg(data) {
  return request({
    url: '/courseService/courseController/updateCourseImg',
    method: 'post',
    data,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 获取课程表信息
 * 获取指定课程的课程表安排
 * @param {string|number} courseId - 课程ID
 * @returns {Promise} - 返回包含课程表信息的 Promise 对象
 */
export function getCourseTable(courseId) {
  return request({
    url: '/courseService/courseController/getCourseTable',
    method: 'get',
    params: { courseId }
  })
}

/**
 * 获取课程学习信息
 * 根据课程安排ID获取课程的学习相关信息
 * @param {string|number} scheduleId - 课程安排ID
 * @returns {Promise} - 返回包含课程学习信息的 Promise 对象
 */
export function getCourseStudyInfo(scheduleId) {
  return request({
    url: '/courseService/courseController/selectCourseInfoByScheduleId',
    method: 'get',
    params: { scheduleId }
  })
}

/**
 * 预约课程
 * 预约指定的课程安排
 * @param {Object} data - 包含预约信息的对象
 * @returns {Promise} - 返回预约结果的 Promise 对象
 */
export function bookCourse(data) {
  return request({
    url: '/courseService/courseController/bookCourse',
    method: 'post',
    data
  })
}

/**
 * 使用FormData创建新课程
 * 使用FormData格式创建新课程，支持上传图片等文件
 * @param {FormData} formData - 包含课程信息和图片的表单数据
 * @returns {Promise} - 返回创建结果的 Promise 对象
 */
export function createCourseWithFormData(formData) {
  const token = sessionStorage.getItem('token') || localStorage.getItem('token');
  return axios({
    url: '/courseService/courseController/insertCourse',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data',
      'Authorization': token
    },
    timeout: 30000
  }).then(response => {
    // 如果响应数据被axios包装，则返回response.data
    return response.data || response;
  }).catch(error => {
    console.error('创建课程请求错误:', error);
    throw error;
  });
}

/**
 * 使用JSON格式更新课程信息
 * 使用JSON格式更新课程的基本信息
 * @param {Object} data - 包含更新后的课程数据
 * @returns {Promise} - 返回更新结果的 Promise 对象
 */
export function updateCourseWithJson(data) {
  return fetch('/courseService/courseController/updateCourse', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'authorization': sessionStorage.getItem('token') || localStorage.getItem('token')
    },
    body: JSON.stringify(data)
  }).then(res => res.json())
}

/**
 * 删除课程图片
 * 删除指定课程的特定类型图片
 * @param {string|number} courseId - 课程ID
 * @param {string} relationType - 图片关系类型（title, content1, content2, content3, content4）
 * @returns {Promise} - 返回删除结果的 Promise 对象
 */
export function deleteCourseImg(courseId, relationType) {
  const params = new URLSearchParams()
  params.append('courseId', courseId)
  params.append('relationType', relationType)
  
  return fetch('/courseService/courseController/delCourseImg', {
    method: 'POST',
    headers: {
      'authorization': sessionStorage.getItem('token') || localStorage.getItem('token')
    },
    body: params
  }).then(response => response.json())
}

/**
 * 获取课程评论列表
 * 获取指定课程的所有评论
 * @param {number} courseId - 课程ID
 * @returns {Promise} - 返回包含评论列表的 Promise 对象
 */
export function getCourseReviewList(courseId) {
  if (!courseId) {
    return Promise.reject(new Error('课程ID不能为空'))
  }
  
  return request({
    url: '/courseService/courseReviewController/getCourseReviewList',
    method: 'get',
    params: { courseId: Number(courseId) }
  })
}

/**
 * 获取评论的回复列表
 * @param {number} reviewId - 评论ID
 * @returns {Promise} - 返回回复列表
 */
export function getCourseReviewReplyList(reviewId) {
  if (!reviewId) {
    return Promise.reject(new Error('评论ID不能为空'))
  }
  
  return request({
    url: '/courseService/courseReviewController/getCourseReviewReplyList',
    method: 'get',
    params: { 
      reviewId: Number(reviewId) // 确保reviewId是数字类型
    }
  })
}

/**
 * 发表课程评论
 * 为指定课程发表新的评论
 * @param {Object} courseReview - 包含评论信息的对象
 * @returns {Promise} - 返回评论结果的 Promise 对象
 */
export function insertCourseReview(courseReview) {
  if (!courseReview || !courseReview.courseId) {
    return Promise.reject(new Error('课程评论数据不完整'))
  }
  
  return request({
    url: '/courseService/courseReviewController/insertCourseReview',
    method: 'post',
    data: courseReview
  })
}

/**
 * 回复课程评论
 * @param {Object} courseReview - 评论回复对象
 * @returns {Promise} - 返回回复结果
 */
export function replyCourseReview(courseReview) {
  if (!courseReview || !courseReview.parentId) {
    return Promise.reject(new Error('评论回复数据不完整'))
  }
  
  return request({
    url: '/courseService/courseReviewController/replyCourseReview',
    method: 'post',
    data: courseReview
  })
}

/**
 * 删除课程评论
 * 删除指定ID的课程评论
 * @param {number} reviewId - 评论ID
 * @returns {Promise} - 返回删除结果的 Promise 对象
 */
export function deleteCourseReview(reviewId) {
  if (!reviewId) {
    return Promise.reject(new Error('评论ID不能为空'))
  }
  
  return request({
    url: '/courseService/courseReviewController/deleteCourseReview',
    method: 'delete',
    params: { reviewId }
  })
}

/**
 * 通过课程安排ID和课程ID查询预约信息
 * @param {number|string} scheduleId - 课程安排ID
 * @param {number|string} courseId - 课程ID
 * @returns {Promise} - 返回预约信息
 */
export function selectBookingByScheduleIdAndCourseId(scheduleId, courseId) {
  const token = sessionStorage.getItem('token') || localStorage.getItem('token')
  if (!token) {
    return Promise.reject(new Error('未登录'))
  }

  return request({
    url: '/courseService/courseController/selectBookingByScheduleIdAndCourseId',
    method: 'get',
    headers: {
      'Authorization': token
    },
    params: {
      scheduleId,
      courseId
    }
  }).then(response => {
    return response
  }).catch(error => {
    throw error
  })
}

/**
 * 获取用户推荐课程
 * @returns {Promise} - 返回用户推荐的课程列表
 */
export function getUserRecommendations() {
  return request({
    url: '/aiService/chat/userRecommendations',
    method: 'get'
  }).then(response => {
    return response
  }).catch(error => {
    throw error
  })
}

/**
 * 获取热门推荐课程
 * @returns {Promise} - 返回热门推荐的课程列表
 */
export function getHotRecommendations() {
  return request({
    url: '/aiService/chat/hotRecommendations',
    method: 'get'
  }).then(response => {
    return response
  }).catch(error => {
    throw error
  })
}

/**
 * 获取每日一刻推荐
 * @returns {Promise} - 返回每日一刻推荐内容
 */
export function getHappyRecommendations() {
  return request({
    url: '/aiService/chat/happyRecommendations',
    method: 'get'
  }).then(response => {
    return response
  }).catch(error => {
    throw error
  })
} 